///////////////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
#include <Config.h>
//-----------------------------------------------------------------------------

template<class T>
class	mgl_pointer
{
public:
	mgl_pointer(T* ptr = NULL)	:	p(ptr)
	{
		if( p )
		{
			p->grab();
		}
	}

	~mgl_pointer()
	{
		if( p )
		{
			p->drop();
		}
	}

	T*	operator=(T* ptr)
	{
		if( p )
		{
			p->drop();
		}
		p = ptr;
		if( p )
		{
			p->grab();
		}
		return p;
	}

	T*	operator=(mgl_pointer<T> ptr)
	{
		if( p )
		{
			p->drop();
		}
		p = ptr.p;
		if( p )
		{
			p->grab();
		}
		return p;
	}

	T*	get()
	{
		return p;
	}

	T&	operator*()
	{
		return *p;
	}

	T*	operator->()
	{
		return p;
	}

private:
	T*	p;
};

//-----------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////
